#!/usr/bin/env node

/**
 * 测试上传功能
 * 用于验证腾讯云上传服务是否正常工作
 */

const path = require('path');
const fs = require('fs');

// 引入上传服务
const cosUploader = require('./lib/cosUploader');
const buildUploader = require('./lib/buildUploader');

/**
 * 测试腾讯云连接
 */
async function testCOSConnection() {
  console.log('=== 测试腾讯云连接 ===');
  
  try {
    // 测试列出已上传版本
    const versions = await cosUploader.listUploadedVersions();
    console.log(`✅ 连接成功，已上传 ${versions.length} 个版本`);
    
    if (versions.length > 0) {
      console.log('最新版本:');
      versions.slice(0, 3).forEach((version, index) => {
        console.log(`  ${index + 1}. ${version.fileName} (${version.version})`);
      });
    }
    
    return true;
  } catch (error) {
    console.error('❌ 连接失败:', error.message);
    return false;
  }
}

/**
 * 测试文件信息获取
 */
function testFileInfo() {
  console.log('\n=== 测试文件信息获取 ===');
  
  // 模拟文件路径
  const testFiles = [
    path.join(__dirname, 'package.json'),
    path.join(__dirname, 'lib/index.js')
  ];
  
  testFiles.forEach(filePath => {
    if (fs.existsSync(filePath)) {
      const info = cosUploader.getExeFileInfo(filePath);
      if (info) {
        console.log(`✅ ${path.basename(filePath)}:`);
        console.log(`   大小: ${(info.fileSize / 1024).toFixed(2)} KB`);
        console.log(`   MD5: ${info.md5}`);
      }
    } else {
      console.log(`⚠️  文件不存在: ${path.basename(filePath)}`);
    }
  });
}

/**
 * 测试版本路径生成
 */
function testPathGeneration() {
  console.log('\n=== 测试路径生成 ===');
  
  const testVersions = ['1.0.0', '1.3.8', '2.0.0'];
  
  testVersions.forEach(version => {
    const cloudPath = cosUploader.generateCloudPath(version);
    console.log(`版本 ${version}: ${cloudPath}`);
  });
}

/**
 * 测试构建上传器配置
 */
function testBuildUploaderConfig() {
  console.log('\n=== 测试构建上传器配置 ===');
  
  const config = buildUploader.getConfig();
  console.log('当前配置:');
  Object.entries(config).forEach(([key, value]) => {
    console.log(`  ${key}: ${value}`);
  });
}

/**
 * 测试版本检查
 */
async function testVersionCheck() {
  console.log('\n=== 测试版本检查 ===');
  
  try {
    const currentVersion = buildUploader.getVersionFromPackage();
    console.log(`当前版本: ${currentVersion}`);
    
    if (currentVersion) {
      const exists = await buildUploader.isVersionUploaded(currentVersion);
      console.log(`版本 ${currentVersion} 是否已上传: ${exists ? '是' : '否'}`);
    }
  } catch (error) {
    console.error('版本检查失败:', error.message);
  }
}

/**
 * 主测试函数
 */
async function runTests() {
  console.log('🚀 开始测试上传功能...\n');
  
  try {
    // 测试各项功能
    await testCOSConnection();
    testFileInfo();
    testPathGeneration();
    testBuildUploaderConfig();
    await testVersionCheck();
    
    console.log('\n✅ 所有测试完成！');
    console.log('\n📝 使用说明:');
    console.log('1. 执行构建: npm run build:win');
    console.log('2. 手动上传: npm run post-build-upload');
    console.log('3. 查看日志: 检查 upload-logs/ 目录');
    
  } catch (error) {
    console.error('\n❌ 测试过程中出现错误:', error.message);
    process.exit(1);
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  runTests().catch(error => {
    console.error('测试执行失败:', error);
    process.exit(1);
  });
}

module.exports = { runTests };
